package com.example.fw;


import java.util.List;

import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;

import com.example.tests.GroupData;
import com.example.utils.SortedListOf;

 
public class GroupHelper extends WebDriverHelperBase {


        public GroupHelper(ApplicationManager manager) {
                super(manager);
        }
        
        
        public GroupHelper createGroup(GroupData group) {
                manager.navigateTo().groupsPage(); 
                initGroupCreation();
                fillGroupForm(group);
                submitGroupCreation();
                returntoGroupsPage();
                //update model;
                manager.getModel().addGroup(group);
                return this;
                
        }


        public GroupHelper deleteGroup(int index) {
                selectGroupByIndex(index);
                submitGroupDeletion();
                returntoGroupsPage();
                manager.getModel().removeGroup(index);
                return this;
                
        }


        public GroupHelper modifyGroup(int index, GroupData group) {
                initGroupModification(index);
                fillGroupForm(group);
                submitGroupModification();
                returntoGroupsPage();
                manager.getModel().removeGroup(index).addGroup(group);
                return this;
        }
        //------------------------------------------------------------
        
        public SortedListOf<GroupData> getUIGroups() {
        	SortedListOf<GroupData> groups = new SortedListOf<GroupData>();
            manager.navigateTo().groupsPage();
            List<WebElement> checkboxes = driver.findElements(By.name("selected[]"));
            for (WebElement checkbox : checkboxes) {
                    String title = checkbox.getAttribute("title");
                    String name = title.substring("select (".length(), title.length() - ")".length());
                    groups.add(new GroupData().withName(name));
            }
            return groups;
    }
        
        public GroupHelper initGroupCreation() {
                manager.navigateTo().groupsPage(); 
                click(By.name("new"));
                return this;
        }


        public GroupHelper fillGroupForm(GroupData group) {
                type(By.name("group_name"), group.getName());
                type(By.name("group_header"), group.getHeader());
                type(By.name("group_footer"), group.getFooter());
                return this;
        }


        public GroupHelper submitGroupCreation() {
                click(By.name("submit"));
                return this;
        }


        public GroupHelper returntoGroupsPage() {
                click(By.linkText("group page"));
                return this;
        }




        private void selectGroupByIndex(int index) {
                click(By.xpath("//input[@name='selected[]']["+ (index+1) +"]"));
        }


        public GroupHelper initGroupModification(int index) {
                selectGroupByIndex(index);
                click(By.name("edit"));
                return this;
                
        }


        public GroupHelper submitGroupModification() {
                click(By.name("update"));
                return this;
                
        }


        private void submitGroupDeletion() {
                click(By.name("delete"));
        }






}
